package com.hqd.ch03.v51.boot;

import java.util.function.Supplier;

/**
 * 启动引导上下文
 */
public interface BootstrapContext {
    /**
     * 如果类型已注册，则从上下文中返回一个实例
     * 如果以前没有访问过该实例，则将创建该实例
     */
    <T> T get(Class<T> type) throws IllegalStateException;

    <T> T getOrElse(Class<T> type, T other);

    <T> T getOrElseSupply(Class<T> type, Supplier<T> other);

    <T, X extends Throwable> T getOrElseThrow(Class<T> type, Supplier<? extends X> exceptionSupplier) throws X;

    <T> boolean isRegistered(Class<T> type);
}
